package dao.xml;

import static org.junit.Assert.assertEquals;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import junit.Categories.XMLTests;

import model.Adresse;
import model.Anlage;
import model.Teilnehmer;
import model.Termin;
import model.Terminplaner;
import model.Termin.TerminArt;

import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;

@Category(XMLTests.class)
public class TerminXMLAustausch {

	Termin testTermin;
	Anlage testAnlage;
	Anlage testAnlage2;
	Teilnehmer testTeilnehmer;
	Teilnehmer testTeilnehmer2;
	Teilnehmer testTeilnehmer3;
	Adresse testAdresse;
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
	TerminXstream xstream;
	Terminplaner testTerminplaner;
	Adresse adresse = new Adresse("Wien", "1060", "Webgasse 12",
	"oesterreich");

	Termin termin;
	Anlage anlage;
	Teilnehmer teilnehmer;

	TerminSAXdao sax;
	TerminDOMdao dom;

	
	@Before
	public void setUp() throws Exception {
		testTerminplaner = new Terminplaner();

		testAdresse = new Adresse("Wien", "1060", "Webgasse 12", "oesterreich");
		testTermin = new Termin("Besprechung", "Spannende Besprechung",
				sdf.parse("2011/02/24 12:15"), sdf.parse("2011/02/25 16:15"),
				TerminArt.GESCHAEFTLICH, Integer.valueOf(2), testAdresse);
		testTeilnehmer = new Teilnehmer("Paul", "Stranz", "Herr");
		testTeilnehmer2 = new Teilnehmer("Sabine", "Fritz", "Frau");
		testTeilnehmer3 = new Teilnehmer("Max", "Meier", "Herr");
		testAnlage = new Anlage("Flyer", "C:/Windows",
				sdf.parse("2011/01/04 02:45"));
		testAnlage2 = new Anlage("Einladung", "D:/moep",
				sdf.parse("2011/01/22 09:40"));

		testTermin.addTeilnehmer(testTeilnehmer);
		testTermin.addTeilnehmer(testTeilnehmer2);
		testTermin.addTeilnehmer(testTeilnehmer3);
		testTermin.addAnlage(testAnlage);
		testTermin.addAnlage(testAnlage2);
		testTerminplaner.addTermin(testTermin);

		xstream = new TerminXstream();


		Termin termin = new Termin("Besprechung", "blablabla",
			sdf.parse("2010/10/20 10:15"), sdf.parse("2010/10/20 12:15"),
			TerminArt.GESCHAEFTLICH, Integer.valueOf(4), adresse);
		Anlage anlage = new Anlage("Datei", "C:", sdf.parse("2010/10/10 10:50"));
		Teilnehmer teilnehmer = new Teilnehmer("Paul", "Stranz", "Herr");
		termin.addAnlage(anlage);
		termin.addTeilnehmer(teilnehmer);
		ArrayList<Termin> termine = new ArrayList<Termin>();
		termine.add(termin);
		termine.add(testTermin);
		testTerminplaner.addTermin(termin);
			
		sax = new TerminSAXdao();
		dom = new TerminDOMdao();
		
	}
	
	@Test
	public void testWriteAndReadMitSAX() throws Exception {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		
		xstream.write(baos, testTerminplaner);
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

		
		assertEquals(sax.getTermine(bais), testTerminplaner);
		
		baos.close();
		bais.close();
	}
	
	@Test
	public void testWriteAndReadMitDOM() throws Exception {

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		
		xstream.write(baos, testTerminplaner);
		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

		
		assertEquals(dom.getTermine(bais), testTerminplaner);
		
		baos.close();
		bais.close();
	}

}
